// /*
//  * @Author: Tendo
//  * @Date: 2022-04-29 14:26:45
//  * @LastEditTime: 2022-04-29 17:57:42
//  * @LastEditors: Tendo
//  * @Description: 
//  * @FilePath: \TS\正则.ts
//  */

let regMap: Map<string, RegExp> = new Map();
//手机号
regMap.set('mobile', /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/)
//纯数字
regMap.set('passWord_num', /\d/)
//小写字母
regMap.set('passWord_min', /[a-z]/)
//大写字母
regMap.set('passWord_max', /[A-Z]/)
//特殊字符
regMap.set('passWord_spe', /\W/)
//包含大小写字母，数字，特殊字符
regMap.set('passWord_dreg', /(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9])/)
//包含任意三种
regMap.set('passWord_three', /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]$/)
//一二代身份证号
regMap.set('idCard_all', /(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/)
// 邮箱
regMap.set('email', /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)
//网址
regMap.set('webUrl', /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/)
//QQ号
regMap.set('qqNumber', /^[1-9][0-9]{4,10}$/)
//中文姓名
regMap.set('chinaName', /^([\u4e00-\u9fa5·]{2,16})$/)
//英文姓名
regMap.set('engName', /(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/)
//日期
regMap.set('data', /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/)
//不包含字母
regMap.set('notletter', /^[^A-Za-z]*$/)


export default function reg(name: string, data: string) {
    data = data.trim();
    let a = regMap.get(name) as RegExp;
    return a.test(data)
};

// interface RegType {
//     [key: string]: RegExp
// }

// function reg(name: any, data: any): boolean{
//     data = data.trim();
//     let obj: RegType = {
//         //手机号
//         mobile: /^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$/,
//         //密码大小写区分,若有需要，在/  末尾添加对应的位数...｛8｝区间则为｛8，12｝/
//         //纯数字
//         passWord_num: /\d/,
//         //小写字母
//         passWord_min: /[a-z]/,
//         //大写字母
//         passWord_max: /[A-Z]/,
//         //特殊字符
//         passWord_spe: /\W/,
//         //包含大小写字母，数字，特殊字符
//         passWord_dreg: /(?=.*\d)(?=.*[a-zA-Z])(?=.*[^a-zA-Z0-9])/,
//         //包含任意三种
//         passWord_three:
//             /^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_!@#$%^&*`~()-+=]+$)(?![a-z0-9]+$)(?![a-z\W_!@#$%^&*`~()-+=]+$)(?![0-9\W_!@#$%^&*`~()-+=]+$)[a-zA-Z0-9\W_!@#$%^&*`~()-+=]$/,
//         //一二代身份证号
//         idCard_all:
//             /(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/,
//         //邮箱验证
//         email:
//             /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/,

//         //网址
//         webUrl:
//             /^((https?|ftp|file):\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/,
//         //QQ号
//         qqNumber: /^[1-9][0-9]{4,10}$/,
//         //中文姓名
//         chinaName: /^([\u4e00-\u9fa5·]{2,16})$/,
//         //英文姓名
//         engName: /(^[a-zA-Z]{1}[a-zA-Z\s]{0,20}[a-zA-Z]{1}$)/,
//         //邮政编码
//         postalCode:
//             /^(0[1-7]|1[0-356]|2[0-7]|3[0-6]|4[0-7]|5[1-7]|6[1-7]|7[0-5]|8[013-6])\d{4}$/,
//         //日期
//         data: /^(?:(?!0000)[0-9]{4}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-8])|(?:0[13-9]|1[0-2])-(?:29|30)|(?:0[13578]|1[02])-31)|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)-02-29)$/,
//         //html标签
//         html: /<(.*)>.*<\/\1>|<(.*) \/>/,
//         //微信号
//         wxCode: /^[a-zA-Z]([-_a-zA-Z0-9]{5,19})+$/,
//         //不包含字母
//         notletter: /^[^A-Za-z]*$/,
//     };
//     for (let demo in obj) {
//         if (demo == name) {
//             if (obj[demo].test(data)) {
//                 return true;
//             } else {
//                 return false;
//             }
//         }
//     }
// };

// reg('mobile', '6666666')